package teste;

import org.junit.Test;

import saa.model.EmentaDisciplina;
import static junit.framework.Assert.*;

public class TesteEmenta {

    /**
     * Garante que apesar de similares, a não ser que duas ementas tenham mesmos
     * valores para nome, carga-horário e disciplinas relacionadas elas não
     * serão consideradas idênticas.
     */
    @Test
    public void testeEquidade() {
        EmentaDisciplina ementa = new EmentaDisciplina("Português", 45);
        EmentaDisciplina ementa2 = new EmentaDisciplina("Português", 45);
        EmentaDisciplina ementa3 = new EmentaDisciplina("Português", 60);
        
        // mesmo nome, carga-horária e disciplinas relacionadas
        assertTrue(ementa.equals(ementa2));
        
        // apenas carga-horária diferente
        assertFalse(ementa.equals(ementa3));

        ementa.adicionarEmentaRelacionada(ementa3);
        
        // apenas disciplinas relacionadas diferentes
        assertFalse(ementa.equals(ementa2));
    }

    /**
     * Garante que as diferentes ementas podem referenciar a mesma ementa em
     * disciplinas relacionadas.
     */
    @Test
    public void testeDisciplinasRelacionadas() {

        EmentaDisciplina ementa = new EmentaDisciplina("Português", 45);
        EmentaDisciplina ementa2 = new EmentaDisciplina("Português", 45);
        EmentaDisciplina ementa3 = new EmentaDisciplina("Português", 60);

        ementa.adicionarEmentaRelacionada(ementa3);
        ementa2.adicionarEmentaRelacionada(ementa3);
        
        // unica instância para disciplina relacionada em duas outras disciplinas
        assertTrue(ementa.getEmentasRelacionadas().toArray()[0] == ementa2.getEmentasRelacionadas().toArray()[0]);
    }
}